import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

//class Plane {
//    int t, d, l;
//    // 飞机类，包含到达时间 t，最迟降落时间 d，降落所需时间 l
//    public Plane(int t, int d, int l) {
//        this.t = t;
//        this.d = d;
//        this.l = l;
//    }
//}
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] a = new int[100];
        int n = sc.nextInt();
        int count = 0;
        while(count < n){
            char[] ch = sc.nextLine().toCharArray();
            for(char c : ch){
                if(c >= 'A' && c <= 'Z' && ch[ch.length - 2] == c){
                    a[c -'A']++;
                    count++;
                }
            }
        }
        for (int i = 0;i < 4;i++){
            System.out.println(a[i]);
        }
    }
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int[] a = new int[10];
//        int count = 0;
//        int ret = 0;
//        int n = sc.nextInt();
//        while(count < n){
//            char[] ch = sc.nextLine().toCharArray();
//            for(char c : ch){
//                if(c == ':'){
//                    if(ch.length == 8) ret++;
//                    count++;
//                }
//            }
//        }
////        for(int i = 0; i < 4; i++){
////            System.out.println(a[i]);
////        }
//        System.out.println(ret);
//    }
//    public static void main(String[] args) {
//        // 创建一个 ConcurrentHashMap
//        ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
//
//        // 定义键
//        String key = "exampleKey";
//
//        // 使用 computeIfAbsent 方法
//        // 首先检查 map 中是否存在键 "exampleKey"
//        // 如果不存在，将调用 lambda 表达式生成一个新的值并存储在 map 中
//        // 这里将键的长度作为新的值
//        Integer value = map.computeIfAbsent(key, k -> k.length());
//
//        // 输出结果
//        System.out.println("Value for key " + key + " is: " + value);
//
//        // 尝试再次使用 computeIfAbsent 方法，这次键已经存在
//        // 它将直接返回之前存储的值
//        Integer value2 = map.computeIfAbsent(key, k -> 0);
//        System.out.println("Value for key " + key + " on second try is: " + value2);
//    }
//    public static void main(String[] args) {
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int m = sc.nextInt();
//        char[] s = sc.next().toCharArray();
//        char[] c = sc.next().toCharArray();
//        Arrays.sort(c);
//        int i = 0, j = 0;
//        StringBuilder ret = new StringBuilder();
//        while (i < n && j < m){
//            if(s[i] <= c[j]){
//                ret.append(s[i]);
//                i++;
//            }else {
//                ret.append(c[j]);
//                j++;
//            }
//        }
//        while (i < n) {
//            ret.append(s[i]);
//            i++;
//        }
//        while (j < m) {
//            ret.append(c[j]);
//            j++;
//        }
//        System.out.println(ret.toString());
//    }
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        int[] a = new int[1000010];
//        int ret = Integer.MAX_VALUE;
//        int b = 1,c = 1,d = 1000000;
//        for(int i = 0;i < n;i++){
//            int x = scanner.nextInt();
//            if(x % b == 0){
//                a[x / b]++;
//            }
//            if(b < d){
//                int tmp = b;
//                b = c;
//                c = tmp + b;
//            }
//        }
//        for(int i = 1;i <= d;i++){
//            ret = Math.min(ret,n - a[i]);
//        }
//        System.out.println(ret);
//    }
//    static final int N = 10;
//    static int n;
//    static char[] str = new char[N];
//    static long[][] dp = new long[N][N];
//    static final int MOD = (int) (1e9 + 7);
//    public static void main(String[] args) {
//        Scanner scan = new Scanner(System.in);
//        // 在此输入您的代码...
//        String s = scan.next();
//        for (int i = 1; i <= s.length(); i++) {
//            str[i] = s.charAt(i - 1);
//        }
//        n = s.length();
//        long l = calc();
//        for (int i = 1, j = n; i <= j; i++, j--) {
//            char temp = str[i];
//            str[i] = str[j];
//            str[j] = temp;
//        }
//        for (int i = 1; i <= n; i++) {
//            if (str[i] == '(')
//                str[i] = ')';
//            else
//                str[i] = '(';
//        }
//        long r = calc();
//        System.out.println(l * r % MOD);
//        scan.close();
//    }
//    public static long calc(){
//        for (long[] tem : dp) {
//            Arrays.fill(tem, 0);
//        }
//        dp[0][0] = 1;
//        for(int i = 1;i <= n;i++){
//            if(str[i] == '('){
//                for(int j = 1;j <= n;j++){
//                    dp[i][j] = dp[i-1][j-1];
//                }
//            }else{
//                dp[i][0] = dp[i - 1][0] + dp[i - 1][1];
//                for(int j = 1;j <= n;j++){
//                    dp[i][j] = (dp[i - 1][j + 1] + dp[i][j - 1]) % MOD;
//                }
//            }
//        }
//        for (int i = 0; i <= n; i++) {
//            // 最少的有效方案数为最优方案数
//            if (dp[n][i] != 0) {
//                return dp[n][i];
//            }
//        }
//        return -1;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        char[] ch = in.nextLine().toCharArray();
//        char[] s = in.nextLine().toCharArray();
//        int n = ch.length,m = s.length;
//        int[][] dp = new int[n + 1][m + 1];
//        for(int i = 0;i <= n;i++){
//            for(int j = 0;j <= m;j++){
//                dp[i][j] = 0x3f3f3f3f;
//            }
//        }
//        for(int i = 0;i <= n;i++){
//            dp[i][0] = 0;
//        }
//        for(int i = 1;i <= n;i++){
//            for(int j = 1;j <= Math.min(i,m);j++){
//                if(ch[i - 1] == s[j - 1])dp[i][j] = dp[i - 1][j - 1];
//                else dp[i][j] = Math.min(dp[i - 1][j - 1] + 1,dp[i - 1][j]);
//            }
//        }
//        System.out.print(dp[n][m]);
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int count = 5,ret = 0;
//        while(count-- > 0){
//            int x = in.nextInt();
//            int d = x % 10;
//            x /= 10;
//            int c = x % 10;
//            x /= 10;
//            int b = x % 10;
//            x /= 10;
//            int a = x % 10;
//            if(a == c && b + 1 == d)ret++;
//        }
//        System.out.print(ret);
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        int m = in.nextInt();
//        Stack<Integer> s1 = new Stack<>();
//        Stack<Integer> s2 = new Stack<>();
//        for(int i = 0;i < n;i++)s1.push(in.nextInt());
//        for(int i = 0;i < m;i++)s2.push(in.nextInt());
//        int ret = 0;
//        while(!s1.empty() || !s2.empty()){
//            int a = s1.peek();
//            int b = s2.peek();
//            if(a == b){
//                s1.pop();
//                s2.pop();
//            }
//            if(!s1.empty() && !s2.empty() && a < b){
//                if(s1.size() > 1){
//                    s1.push(s1.pop() + s1.pop());
//                    ret++;
//                }else break;
//            }else if(!s1.empty() && !s2.empty() && a > b){
//                if(s2.size() > 1){
//                    s2.push(s2.pop() + s2.pop());
//                    ret++;
//                }else break;
//            }
//        }
//        System.out.println(ret);
//    }
//    public static int[] a = new int[100010];
//    public static int l,p;
//    public static void func(){
//        for(int i = 1;i <= l;i++){
//            a[i] *= 2;
//        }
//        for(int i = 1;i <= l;i++){
//            a[i + 1] += a[i] / 10;
//            a[i] %= 10;
//        }
//        if(a[l + 1] > 0)l++;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        String d = in.next();
//        StringBuilder s = new StringBuilder(d);
//        s.reverse();
//        p = s.indexOf(".");
//        s.deleteCharAt(p);
//        l = s.length();
//        for(int i = 1;i <= l;i++){
//            a[i] = s.charAt(i - 1) - '0';
//        }
//        for(int i = 0;i < n;i++)func();
//        if(a[p] >= 5)a[p + 1]++;
//        for(int i = p + 1;i <= l;i++){
//            a[i + 1] += a[i] / 10;
//            a[i] %= 10;
//        }
//        if (a[l + 1] > 0) l++;
//        for(int i = l;i > p;i--)
//            System.out.print(a[i]);
//    }
//    public static boolean func(String s){
//        char[] ch = s.toCharArray();
//        int n = ch.length;
//        boolean flag = n % 2 == 0 ? true : false;
//        for(int i = 0;i < n;i++){
//            if(flag){
//                if((ch[i] - '0') % 2 != 0){
//                    return false;
//                }
//                flag = false;
//            }else{
//                if((ch[i] - '0') % 2 == 0){
//                    return false;
//                }
//                flag = true;
//            }
//        }
//        return true;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        HashSet<Integer> set = new HashSet<>();
//        int n = in.nextInt();
//        int ret = 0;
//        for(int i = 1;i < n;i++){
//            if(func(Integer.toString(i)))ret++;
//        }
//        System.out.print(ret);
//    }
//    static int n;
//    static boolean[] vis;
//    static Plane[] a;
//    public static boolean dfs(int pos,int sum){
//        if(pos > n){
//            return true;
//        }
//        for(int i = 0;i < n;i++){
//            if(vis[i] || a[i].t + a[i].d < sum){
//                continue;
//            }
//            vis[i] = true;
//            if(dfs(pos+1,Math.max(sum , a[i].t) + a[i].l)){
//                vis[i] = false;
//                return true;
//            }
//            vis[i] = false;
//        }
//        return false;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int count = in.nextInt();
//        while(count-- > 0){
//            n = in.nextInt();
//            vis = new boolean[20];
//            a = new Plane[20];
//            for(int i = 0; i < n; i++){
//                a[i] = new Plane(in.nextInt(), in.nextInt(), in.nextInt());
//            }
//            System.out.println(dfs(1,0) ? "YES" : "NO");
//        }
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        long a = in.nextLong();long b = in.nextLong();long n = in.nextLong();
//        long ret = 0;
//        if(n >= 5 * a + 2 * b){
//            ret += 7 * (n / (5 * a + 2 * b));
//            if(n % 5 * a + 2 * b != 0){
//                n -= (n / (5 * a + 2 * b)) * (5 * a + 2 * b);
//            }else{
//                n = 0;
//            }
//        }
//        if(n >= 5 * a){
//            ret += 5;
//            n -= 5 * a;
//            if(n > b){
//                ret += 2;
//                n -= 2 * b;
//            }else if(n > 0){
//                ret += 1;
//                n -= b;
//            }
//        }
//        if(n > 0){
//            if(n % a == 0){
//                ret += n / a;
//            }else {
//                ret += n / a + 1;
//            }
//        }
//        System.out.print(ret);
//    }
//    public static char trans(int x,int n){
//        if(x % n < 10){
//            return (char)(x % n + '0');
//        }else {
//            return (char)(x % n - 10 + 'A');
//        }
//    }
//    public static String func(int x,int n){
//        StringBuilder ret = new StringBuilder();
//        while(x > 0){
//            ret.append(trans(x,n));
//            x /= n;
//        }
//        return ret.reverse().toString();
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        for(int i = 1;i < n;i++){
//            for(int j = 1;j <= i;j++){
//                System.out.print(trans(i,n) + "*" + trans(j,n) + "=" + func(i * j,n) + " ");
//            }
//            System.out.println();
//        }
//    }
//    public static char[] ch = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','N','M','O','P','Q','R','S','E','U','P','W','X','Y','Z'};
//    static int n;
//    // 将整数转换为对应的字符
//    static char trans(int a) {
//        if (a % n < 10) {
//            return (char) (a % n + '0');
//        } else {
//            return (char) (a % n + 'A' - 10);
//        }
//    }
    // 十进制转 k 进制
//    static String ten_to_k(int x) {
//        StringBuilder a = new StringBuilder();
//        while (x > 0) {
//            a.append(ch[x % n]);
//            x /= n;
//        }
//        return a.reverse().toString();
//    }
//    public static void main(String[] args) {
//        Scanner scanner = new Scanner(System.in);
//        n = scanner.nextInt();
//        for (int i = 1; i < n; i++) {
//            for (int j = 1; j <= i; j++) {
//                System.out.print(ten_to_k(i) + "*" + ten_to_k(j) + "=" + ten_to_k(i * j) + " ");
//            }
//            System.out.println();
//        }
//    }
//    public static char trans(int x,int n){
//        if(x % n < 10){
//            return (char)(x % n + '0');
//        }else {
//            return (char)(x % n - 10 + 'A');
//        }
//    }
//    public static String func(int x,int n){
//        StringBuilder ret = new StringBuilder();
//        while(x > 0){
//            ret.append(trans(x,n));
//            x /= n;
//        }
//        return ret.reverse().toString();
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        for(int i = 1;i < n;i++){
//            for(int j = 1;j <= i;j++){
//                System.out.print(trans(i,n) + "*" + trans(j,n) + "=" + func(i * j,n) + " ");
//            }
//            System.out.println();
//        }
//    }
//public static void main(String[] args) {
//    System.out.println((char)('A' + (10 - 1 - 9)));
//}
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();int k = in.nextInt();
//        int[][] dp = new int[510][510];
//        dp[1][0] = 1;
//        int mod = 123456;
//        for(int i = 2;i < n;i++){
//            dp[i][0] = 2;
//            for(int j = 0;j <= i;j++){
//                dp[i + 1][j] += (dp[i][j] * (j + 1)) % mod;
//                dp[i + 1][j + 1] += (dp[i][j] * 2) % mod;
//                dp[i + 1][j + 2] += (dp[i][j] * (i - j - 2)) % mod;
//            }
//        }
//        System.out.print(dp[n][k - 1] % mod);
//    }
//    public static boolean func(int x){
//        int num = x,count = 0,n = 10;
//        while(num > 0){
//            num /= 10;
//            count++;
//        }
//        for(int i = 0;i < count;i++,n *= 10){
//            int a = x / n,b = x % n;
//            if(a == 0 || b == 0)continue;
//            if((Math.sqrt(a) % 2 == 0 || Math.sqrt(a) % 2 == 1) &&
//                    (Math.sqrt(b) % 2 == 0 || Math.sqrt(b) % 2 == 1))return true;
//        }
//        return false;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int a = in.nextInt();
//        int b = in.nextInt();
//        for(int i = a;i <= b;i++){
//            if((Math.sqrt(i) % 2 == 0 || Math.sqrt(i) % 2 == 1) && func(i))System.out.println(i);
//        }
//    }
//    public static void main(String[] args) {
//        System.out.println(Math.sqrt(9) % 2);
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        int[] ret1 = new int[366];
//        int[] ret2 = new int[366];
//        int a = 0,b = 0;
//        int[] d = {0,31,29,31,30,31,30,31,31,30,31,30,31};
//        for(int i = 1;i <= 12;i++){
//            for(int j = 1;j < d[i];j++){
//                int s1 = i * 100 + j;
//                int s2 = (s1 % 10) * 1000 + (s1 % 100 / 10) * 100 +
//                        (s1 % 1000 / 100) * 10 + (s1 / 1000);
//                if(s2 < 1000)continue;
//                int s = s2 * 10000 + s1;
//                ret1[a++] = s;
//                if(i / 10 == j / 10 && i % 10 == j % 10) ret2[b++] = s;
//            }
//        }
//
//        Arrays.sort(ret1);
//        Arrays.sort(ret2);
//        for(int i = 0;i < 366;i++){
//            if(n < ret1[i]) {
//                System.out.println(ret1[i]);
//                break;
//            }
//        }
//        for(int i = 0;i < 366;i++){
//            if(n < ret2[i]) {
//                System.out.println(ret2[i]);
//                break;
//            }
//        }
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int n = in.nextInt();
//        int[] nums = new int[n];
//        long ret = 0;
//        long sum = 0;
//        for(int i = 0;i < n;i++){
//            nums[i] = in.nextInt();
//            sum += nums[i];
//        }
//        for(int i = 0;i < n;i++){
//            sum -= nums[i];
//            ret += nums[i] * sum;
//        }
//        System.out.print(ret);
//    }
//    public static int gcd(int x, int y){
//        return x % y == 0 ? y : gcd(y, x % y);
//    }
//    public static void main(String[] args){
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//        int ret = 0;
//        int[] nums = new int[n];
//        for(int i = 0; i < n; i++){
//            nums[i] = sc.nextInt();
//            ret += nums[i] == 1 ? 1 : 0;
//        }
//        if(ret > 0){
//            System.out.println(n - ret);
//        }else {
//            int res = (int)1e9;
//            for(int i = 0; i < n; i++){
//                int x = nums[i];
//                for(int j = i+1; j < n; j++){
//                    x = gcd(x, nums[j]);
//                    if(j - i > res)break;
//                    if(x == 1){
//                        res = j - i;
//                        break;
//                    }
//                }
//            }
//            System.out.println(res == 1e9 ? -1 : res + n - 1);
//        }
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        int[] nums = new int[10010];
//        int count = in.nextInt();
//        int min = 10010,max = 0,m = 0,n = 0;
//        in.nextLine();
//        while(count-- > 0){
//            String[] s = in.nextLine().split(" ");
//            for(int i = 0; i < s.length; i++){
//                int x = Integer.parseInt(s[i]);
//                nums[x]++;
//                min = Math.min(min,x);
//                max = Math.max(max,x);
//                if(nums[x] == 2){
//                    n = i;
//                }
//            }
//        }
//        for(int i = min;i <= max;i++){
//            if(nums[i] == 0){
//                m = i;
//                System.out.print(m + " " + n);
//                break;
//            }
//        }
//    }
//    public static int[] sum = new int[100010];
//    public static int n,x;
//    public static boolean func(int num){
//        for(int i = num;i < n;i++)if(sum[i] - sum[i - num] < 2 * x) return false;
//        return true;
//    }
//    public static void main(String[] args){
//        Scanner in = new Scanner(System.in);
//        n = in.nextInt();
//        x = in.nextInt();
//        for(int i = 1;i < n;i++){
//            int x = in.nextInt();
//            sum[i] = sum[i - 1] + x;
//        }
//        int left = 1,right = n;
//        while(left < right){
//            int mid = (left + right) / 2;
//            if(func(mid))right = mid;
//            else left = mid + 1;
//        }
//        System.out.println(right);
//    }
}